#*****************************************************************************
# Makefile del TPE de Arquitecturas de Computadoras
#
#*****************************************************************************


#*****************************************************************************
#Definicion de macros
#*****************************************************************************

CC = gcc
ASMC = nasm

INCLUDEDIR = include
OBJDIR = obj
SRCDIR = src
BINDIR = bin

CFLAGS = -Wall -I$(INCLUDEDIR) -c 
ASMFLAGS = -f aout -I$(INCLUDEDIR)/

KERNEL_OBJS = 	$(OBJDIR)/kstart.o $(OBJDIR)/libasm.o $(OBJDIR)/asmfunc.o \
		$(OBJDIR)/libc.o $(OBJDIR)/video.o $(OBJDIR)/keyboard.o \
		$(OBJDIR)/auxlib.o $(OBJDIR)/shellfunctions.o \
		$(OBJDIR)/kernel.o $(OBJDIR)/serial.o


#*****************************************************************************
#Genera todos los ejecutables
#*****************************************************************************

all: 	kernel.bin


#*****************************************************************************
#Genera ejecutable kernel.bin
#*****************************************************************************

kernel.bin:			$(KERNEL_OBJS)
				ld -T $(SRCDIR)/link.ld -o $(BINDIR)/$@ $?
				cp $(BINDIR)/$@ $@

$(OBJDIR)/kstart.o:		$(SRCDIR)/kstart.asm 
				$(ASMC) $(ASMFLAGS) $? -o $@

$(OBJDIR)/libasm.o:		$(SRCDIR)/libasm.asm
				$(ASMC) $(ASMFLAGS) $? -o $@

$(OBJDIR)/asmfunc.o:		$(SRCDIR)/asmfunc.asm 
				$(ASMC) $(ASMFLAGS) $? -o $@

$(OBJDIR)/kernel.o:		$(SRCDIR)/kernel.c 
				$(CC) $(CFLAGS) $? -o $@

$(OBJDIR)/libc.o:		$(SRCDIR)/libc.c 
				$(CC) $(CFLAGS) $? -o $@

$(OBJDIR)/video.o:		$(SRCDIR)/video.c 
				$(CC) $(CFLAGS) $? -o $@

$(OBJDIR)/keyboard.o:		$(SRCDIR)/keyboard.c 
				$(CC) $(CFLAGS) $? -o $@ 

$(OBJDIR)/auxlib.o:		$(SRCDIR)/auxlib.c 
				$(CC) $(CFLAGS) $? -o $@

$(OBJDIR)/shellfunctions.o:	$(SRCDIR)/shellfunctions.c 
				$(CC) $(CFLAGS) $? -o $@

$(OBJDIR)/serial.o:		$(SRCDIR)/serial.c 
				$(CC) $(CFLAGS) $? -o $@


#*****************************************************************************
#Limpieza de ejecutables y archivos objeto
#*****************************************************************************

clean: 
		cd obj; rm *.o;
		cd bin; rm kernel.bin;
		rm kernel.bin;

#*****************************************************************************
